home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch3c < prev    next >
Encoding:
Internet Message Format  |  1989-09-11  |  59.4 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i018:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch3c
  5. Message-ID: <4537@tekred.CNA.TEK.COM>
  6. Date: 7 Sep 89 21:49:38 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 2176
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 18
  13. Archive-name: NetHack3/Patch3c
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 3 (of 6)."
  23. # Contents:  patch03c
  24. # Wrapped by billr@saab on Thu Sep  7 14:38:47 1989
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'patch03c' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'patch03c'\"
  28. else
  29. echo shar: Extracting \"'patch03c'\" \(56862 characters\)
  30. sed "s/^X//" >'patch03c' <<'END_OF_FILE'
  31. X*** src/Old/apply.c    Wed Sep  6 15:38:11 1989
  32. X--- src/apply.c    Tue Sep  5 18:52:45 1989
  33. X***************
  34. X*** 482,491 ****
  35. X          register char *digtxt;
  36. X          register struct obj *obj;
  37. X  
  38. X!         if(obj = sobj_at(BOULDER, dpx, dpy)) {
  39. X!             fracture_rock(obj);
  40. X!             digtxt = "The boulder falls apart.";
  41. X!         } else if(obj = sobj_at(STATUE, dpx, dpy)) {
  42. X              if (break_statue(obj))
  43. X                  digtxt = "The statue shatters.";
  44. X              else
  45. X--- 482,488 ----
  46. X          register char *digtxt;
  47. X          register struct obj *obj;
  48. X  
  49. X!         if(obj = sobj_at(STATUE, dpx, dpy)) {
  50. X              if (break_statue(obj))
  51. X                  digtxt = "The statue shatters.";
  52. X              else
  53. X***************
  54. X*** 493,498 ****
  55. X--- 490,498 ----
  56. X                   * printed a message and updated the screen
  57. X                   */
  58. X                  digtxt = NULL;
  59. X+         } else if(obj = sobj_at(BOULDER, dpx, dpy)) {
  60. X+             fracture_rock(obj);
  61. X+             digtxt = "The boulder falls apart.";
  62. X          } else if(!lev->typ || lev->typ == SCORR) {
  63. X              lev->typ = CORR;
  64. X              digtxt = "You succeeded in cutting away some rock.";
  65. X***************
  66. X*** 585,591 ****
  67. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  68. X          pline("You've made a hole in the floor.");
  69. X          if(!u.ustuck && !Levitation) {            /* KAA */
  70. X!             if(inshop())
  71. X                  shopdig(1);
  72. X  #ifdef WALKIES
  73. X              if(!next_to_u())
  74. X--- 585,591 ----
  75. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  76. X          pline("You've made a hole in the floor.");
  77. X          if(!u.ustuck && !Levitation) {            /* KAA */
  78. X!             if(in_shop(u.ux, u.uy))
  79. X                  shopdig(1);
  80. X  #ifdef WALKIES
  81. X              if(!next_to_u())
  82. X***************
  83. X*** 704,722 ****
  84. X                  dig_level = dlevel;
  85. X                  dig_effort = 0;
  86. X                      You("start %s.",
  87. X-                    isclosedoor ? "chopping at the door" :
  88. X                     sobj_at(STATUE, rx, ry) ?
  89. X                          "chipping the statue" :
  90. X                     sobj_at(BOULDER, rx, ry) ?
  91. X                          "hitting the boulder" :
  92. X                          "digging");
  93. X              } else
  94. X                  You("continue %s.",
  95. X-                    isclosedoor ? "chopping at the door" :
  96. X                     sobj_at(STATUE, rx, ry) ?
  97. X                          "chipping the statue" :
  98. X                     sobj_at(BOULDER, rx, ry) ?
  99. X                          "hitting the boulder" :
  100. X                          "digging");
  101. X              did_dig_msg = FALSE;
  102. X              set_occupation(dig, "digging", 0);
  103. X--- 704,722 ----
  104. X                  dig_level = dlevel;
  105. X                  dig_effort = 0;
  106. X                      You("start %s.",
  107. X                     sobj_at(STATUE, rx, ry) ?
  108. X                          "chipping the statue" :
  109. X                     sobj_at(BOULDER, rx, ry) ?
  110. X                          "hitting the boulder" :
  111. X+                    isclosedoor ? "chopping at the door" :
  112. X                          "digging");
  113. X              } else
  114. X                  You("continue %s.",
  115. X                     sobj_at(STATUE, rx, ry) ?
  116. X                          "chipping the statue" :
  117. X                     sobj_at(BOULDER, rx, ry) ?
  118. X                          "hitting the boulder" :
  119. X+                    isclosedoor ? "chopping at the door" :
  120. X                          "digging");
  121. X              did_dig_msg = FALSE;
  122. X              set_occupation(dig, "digging", 0);
  123. X***************
  124. X*** 732,738 ****
  125. X              dig_level = dlevel;
  126. X              dig_effort = 0;
  127. X              You("start digging in the floor.");
  128. X!             if(inshop())
  129. X                  shopdig(0);
  130. X          } else
  131. X              You("continue digging in the floor.");
  132. X--- 732,738 ----
  133. X              dig_level = dlevel;
  134. X              dig_effort = 0;
  135. X              You("start digging in the floor.");
  136. X!             if(in_shop(u.ux, u.uy))
  137. X                  shopdig(0);
  138. X          } else
  139. X              You("continue digging in the floor.");
  140. X***************
  141. X*** 1031,1036 ****
  142. X--- 1031,1037 ----
  143. X  
  144. X      if(!obj || (obj != uwep && !wield_tool(obj))) return 0;
  145. X  
  146. X+     /* now uwep is obj */
  147. X      if (uwep->otyp == MAGIC_LAMP) {
  148. X          if (uwep->spe > 0 && !rn2(3)) {
  149. X          uwep->spe = 0;
  150. X*** src/Old/artifact.c    Wed Sep  6 15:38:48 1989
  151. X--- src/artifact.c    Sat Sep  2 12:15:16 1989
  152. X***************
  153. X*** 15,24 ****
  154. X  
  155. X  { LONG_SWORD,     "Excalibur",    (SPFX_NOGEN | SPFX_SEEK | SPFX_DEFN |
  156. X                                  SPFX_SEARCH), 0,
  157. X!   { 0, AD_PHYS, 5, 10 }, { 0, AD_DRLI, 0, 0} },
  158. X  
  159. X  { KATANA,     "Snickersnee",    SPFX_RESTR, 0,
  160. X!   { 0, AD_PHYS, 0, 8 }, NO_ATTK },
  161. X  
  162. X  /*    Ah, never shall I forget the cry, 
  163. X   *        or the shriek that shrieked he,
  164. X--- 15,24 ----
  165. X  
  166. X  { LONG_SWORD,     "Excalibur",    (SPFX_NOGEN | SPFX_SEEK | SPFX_DEFN |
  167. X                                  SPFX_SEARCH), 0,
  168. X!   { 0, AD_PHYS, 5, 10 }, { 0, AD_DRLI, 0, 0}, A_LAW },
  169. X  
  170. X  { KATANA,     "Snickersnee",    SPFX_RESTR, 0,
  171. X!   { 0, AD_PHYS, 0, 8 }, NO_ATTK, A_LAW },
  172. X  
  173. X  /*    Ah, never shall I forget the cry, 
  174. X   *        or the shriek that shrieked he,
  175. X***************
  176. X*** 30,87 ****
  177. X   */
  178. X  
  179. X  { AXE,         "Cleaver",    SPFX_RESTR, 0,
  180. X!   { 0, AD_PHYS, 3, 12 }, NO_ATTK },
  181. X  
  182. X  /*  Special purpose swords - various types */
  183. X  
  184. X  { TWO_HANDED_SWORD, "Orcrist",    SPFX_DCLAS, S_ORC,
  185. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  186. X  
  187. X  #ifdef TOLKIEN
  188. X  { ELVEN_DAGGER,     "Sting",    (SPFX_WARN | SPFX_DCLAS), S_ORC,
  189. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  190. X  #else
  191. X  { DAGGER,     "Sting",    (SPFX_WARN | SPFX_DCLAS), S_ORC,
  192. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  193. X  #endif
  194. X  
  195. X  { LONG_SWORD,     "Frost Brand", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
  196. X!   { 0, AD_COLD, 5, 0 }, { 0, AD_COLD, 0, 0 } },
  197. X  
  198. X  { LONG_SWORD,     "Fire Brand",    (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
  199. X!   { 0, AD_FIRE, 5, 0 }, { 0, AD_FIRE, 0, 0 } },
  200. X  
  201. X  /* Stormbringer only has a 2 because it can drain a level, providing 8 more */
  202. X  { BROADSWORD,     "Stormbringer", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN |
  203. X                                  SPFX_DRLI), 0,
  204. X!   { 0, AD_DRLI, 5, 2 }, { 0, AD_DRLI, 0, 0 } },
  205. X  
  206. X  { LONG_SWORD,     "Sunsword",    (SPFX_RESTR | SPFX_DCLAS), 0, /* undead */
  207. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  208. X  
  209. X  { BROADSWORD,     "Dragonbane",    (SPFX_RESTR | SPFX_DCLAS), S_DRAGON,
  210. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  211. X  
  212. X  { LONG_SWORD,     "Demonbane",    (SPFX_RESTR | SPFX_DCLAS), 0, /* demons */
  213. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  214. X  
  215. X  { LONG_SWORD,     "Werebane",    (SPFX_RESTR | SPFX_DCLAS), 0, /* weres */
  216. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  217. X  
  218. X  { LONG_SWORD,     "Giantslayer", (SPFX_RESTR | SPFX_DCLAS), 0, /* giants */
  219. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  220. X  
  221. X! { LUCERN_HAMMER, "Ogresmasher",    (SPFX_RESTR | SPFX_DCLAS),  S_OGRE,
  222. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  223. X  
  224. X! { LUCERN_HAMMER, "Thunderfist",    (SPFX_RESTR | SPFX_ATTK),  0,
  225. X!   { 0, AD_ELEC, 5, 24 }, NO_ATTK },
  226. X  
  227. X  { MORNING_STAR,     "Trollsbane", (SPFX_RESTR | SPFX_DCLAS), S_TROLL,
  228. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK },
  229. X  
  230. X  /*    ARRAY TERMINATOR    */
  231. X! { 0,  "", 0, 0, NO_ATTK, NO_ATTK }
  232. X  };
  233. X  
  234. X  void
  235. X--- 30,100 ----
  236. X   */
  237. X  
  238. X  { AXE,         "Cleaver",    SPFX_RESTR, 0,
  239. X!   { 0, AD_PHYS, 3, 12 }, NO_ATTK, A_CHAOS },
  240. X  
  241. X+ #ifdef TOLKIEN
  242. X+ { ORCISH_DAGGER, "Grimtooth",    SPFX_RESTR, 0,
  243. X+   { 0, AD_PHYS, 2, 6 }, NO_ATTK, A_CHAOS },
  244. X+ #else
  245. X+ { DAGGER,     "Grimtooth",    SPFX_RESTR, 0,
  246. X+   { 0, AD_PHYS, 2, 6 }, NO_ATTK, A_CHAOS },
  247. X+ #endif
  248. X+ 
  249. X  /*  Special purpose swords - various types */
  250. X  
  251. X  { TWO_HANDED_SWORD, "Orcrist",    SPFX_DCLAS, S_ORC,
  252. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  253. X  
  254. X  #ifdef TOLKIEN
  255. X  { ELVEN_DAGGER,     "Sting",    (SPFX_WARN | SPFX_DCLAS), S_ORC,
  256. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  257. X  #else
  258. X  { DAGGER,     "Sting",    (SPFX_WARN | SPFX_DCLAS), S_ORC,
  259. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  260. X  #endif
  261. X  
  262. X  { LONG_SWORD,     "Frost Brand", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
  263. X!   { 0, AD_COLD, 5, 0 }, { 0, AD_COLD, 0, 0 }, A_NEUTRAL },
  264. X  
  265. X  { LONG_SWORD,     "Fire Brand",    (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
  266. X!   { 0, AD_FIRE, 5, 0 }, { 0, AD_FIRE, 0, 0 }, A_NEUTRAL },
  267. X  
  268. X  /* Stormbringer only has a 2 because it can drain a level, providing 8 more */
  269. X  { BROADSWORD,     "Stormbringer", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN |
  270. X                                  SPFX_DRLI), 0,
  271. X!   { 0, AD_DRLI, 5, 2 }, { 0, AD_DRLI, 0, 0 }, A_CHAOS },
  272. X  
  273. X  { LONG_SWORD,     "Sunsword",    (SPFX_RESTR | SPFX_DCLAS), 0, /* undead */
  274. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  275. X  
  276. X  { BROADSWORD,     "Dragonbane",    (SPFX_RESTR | SPFX_DCLAS), S_DRAGON,
  277. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_NEUTRAL },
  278. X  
  279. X  { LONG_SWORD,     "Demonbane",    (SPFX_RESTR | SPFX_DCLAS), 0, /* demons */
  280. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  281. X  
  282. X+ /* A silver weapon would be appropriate, if we had one. */
  283. X  { LONG_SWORD,     "Werebane",    (SPFX_RESTR | SPFX_DCLAS), 0, /* weres */
  284. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  285. X  
  286. X  { LONG_SWORD,     "Giantslayer", (SPFX_RESTR | SPFX_DCLAS), 0, /* giants */
  287. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_NEUTRAL },
  288. X  
  289. X! /* Another interesting weapon would be the dwarven hammer or axe with the
  290. X!  * boomerang-like power of returning to the wielder's hand, if the code
  291. X!  * were written to add such an ability.
  292. X!  */
  293. X! { WAR_HAMMER, "Ogresmasher",    (SPFX_RESTR | SPFX_DCLAS),  S_OGRE,
  294. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  295. X  
  296. X! { WAR_HAMMER, "Mjollnir",    (SPFX_RESTR | SPFX_ATTK),  0,
  297. X!   { 0, AD_ELEC, 5, 24 }, NO_ATTK, A_LAW }, /* Mjo:llnir */
  298. X  
  299. X  { MORNING_STAR,     "Trollsbane", (SPFX_RESTR | SPFX_DCLAS), S_TROLL,
  300. X!   { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW },
  301. X  
  302. X  /*    ARRAY TERMINATOR    */
  303. X! { 0,  "", 0, 0, NO_ATTK, NO_ATTK, 0 }
  304. X  };
  305. X  
  306. X  void
  307. X***************
  308. X*** 157,163 ****
  309. X  # if defined(THEOLOGY) && defined(ALTARS)
  310. X  struct obj *
  311. X  mk_aligned_artifact(align)
  312. X! int align;
  313. X  {
  314. X      register struct artifact *artif;
  315. X      register struct obj *otmp;
  316. X--- 170,176 ----
  317. X  # if defined(THEOLOGY) && defined(ALTARS)
  318. X  struct obj *
  319. X  mk_aligned_artifact(align)
  320. X! unsigned align;
  321. X  {
  322. X      register struct artifact *artif;
  323. X      register struct obj *otmp;
  324. X*** src/Old/attrib.c    Wed Sep  6 15:39:06 1989
  325. X--- src/attrib.c    Tue Sep  5 21:34:05 1989
  326. X***************
  327. X*** 375,381 ****
  328. X      }
  329. X  }
  330. X  
  331. X- #ifdef POLYSELF
  332. X  void
  333. X  redist_attr() {
  334. X  
  335. X--- 375,380 ----
  336. X***************
  337. X*** 393,399 ****
  338. X          if (ABASE(i) < attrmin.a[i]) ABASE(i) = attrmin.a[i];
  339. X      }
  340. X  }
  341. X- #endif
  342. X  
  343. X  void
  344. X  adjabil(flag)
  345. X--- 392,397 ----
  346. X*** src/Old/bones.c    Wed Sep  6 15:39:26 1989
  347. X--- src/bones.c    Thu Aug 31 19:09:46 1989
  348. X***************
  349. X*** 133,140 ****
  350. X      /* drop everything; the corpse's possessions are usually cursed */
  351. X      otmp = invent;
  352. X      while(otmp) {
  353. X!         otmp->ox = u.ux;
  354. X!         otmp->oy = u.uy;
  355. X          otmp->owornmask = 0;
  356. X  #ifdef TUTTI_FRUTTI
  357. X          if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
  358. X--- 133,139 ----
  359. X      /* drop everything; the corpse's possessions are usually cursed */
  360. X      otmp = invent;
  361. X      while(otmp) {
  362. X!         place_object(otmp, u.ux, u.uy);
  363. X          otmp->owornmask = 0;
  364. X  #ifdef TUTTI_FRUTTI
  365. X          if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
  366. X***************
  367. X*** 144,160 ****
  368. X              otmp->nobj = fobj;
  369. X              fobj = invent;
  370. X              invent = 0;    /* superfluous */
  371. X-             levl[u.ux][u.uy].omask = 1;
  372. X              break;
  373. X          }
  374. X          otmp = otmp->nobj;
  375. X      }
  376. X      if (u.ugrave_arise == -1) {
  377. X!         if(!(mtmp = makemon(&mons[PM_GHOST], u.ux, u.uy))) return;
  378. X          Strcpy((char *) mtmp->mextra, plname);
  379. X      } else {
  380. X-         in_mklev = TRUE;
  381. X-     /* tricks makemon() into allowing monster creation on your square */
  382. X          mons[u.ugrave_arise].pxlth += strlen(plname);
  383. X          mtmp = makemon(&mons[u.ugrave_arise], u.ux, u.uy);
  384. X          mons[u.ugrave_arise].pxlth -= strlen(plname);
  385. X--- 143,160 ----
  386. X              otmp->nobj = fobj;
  387. X              fobj = invent;
  388. X              invent = 0;    /* superfluous */
  389. X              break;
  390. X          }
  391. X          otmp = otmp->nobj;
  392. X      }
  393. X+     in_mklev = TRUE;
  394. X+     /* tricks makemon() into allowing monster creation on your square */
  395. X      if (u.ugrave_arise == -1) {
  396. X!         mtmp = makemon(&mons[PM_GHOST], u.ux, u.uy);
  397. X!         in_mklev = FALSE;
  398. X!         if (!mtmp) return;
  399. X          Strcpy((char *) mtmp->mextra, plname);
  400. X      } else {
  401. X          mons[u.ugrave_arise].pxlth += strlen(plname);
  402. X          mtmp = makemon(&mons[u.ugrave_arise], u.ux, u.uy);
  403. X          mons[u.ugrave_arise].pxlth -= strlen(plname);
  404. X***************
  405. X*** 279,284 ****
  406. X--- 279,288 ----
  407. X      register int fd;
  408. X      register int ok;
  409. X  
  410. X+ #ifdef EXPLORE_MODE
  411. X+     if(discover)        /* save bones files for real games */
  412. X+         return(0);
  413. X+ #endif
  414. X      /* wizard check added by GAN 02/05/87 */
  415. X      if(rn2(3)    /* only once in three times do we find bones */
  416. X  #ifdef WIZARD
  417. X*** src/Old/cmd.c    Wed Sep  6 15:39:48 1989
  418. X--- src/cmd.c    Wed Aug 30 13:10:33 1989
  419. X***************
  420. X*** 559,570 ****
  421. X      {0,0,0}
  422. X  };
  423. X  #undef M
  424. X- #undef C
  425. X  
  426. X  const struct ext_func_tab extcmdlist[] = {
  427. X      "chat", "talk to someone", dotalk,    /* converse? */
  428. X      "dip", "dip an object into something", dodip,
  429. X!     "force", "force the lock on a chest", doforce,
  430. X      "jump", "jump to a location", dojump,
  431. X      "loot", "loot a box on the floor", doloot,
  432. X  #ifdef POLYSELF
  433. X--- 559,569 ----
  434. X      {0,0,0}
  435. X  };
  436. X  #undef M
  437. X  
  438. X  const struct ext_func_tab extcmdlist[] = {
  439. X      "chat", "talk to someone", dotalk,    /* converse? */
  440. X      "dip", "dip an object into something", dodip,
  441. X!     "force", "force a lock", doforce,
  442. X      "jump", "jump to a location", dojump,
  443. X      "loot", "loot a box on the floor", doloot,
  444. X  #ifdef POLYSELF
  445. X***************
  446. X*** 578,596 ****
  447. X      "rub", "rub a lamp", dorub,
  448. X      "sit", "sit down", dosit,
  449. X      "turn", "turn undead", doturn,
  450. X!     "untrap", "untrap a trapped object", dountrap,
  451. X!     "wipe", "wipe your face off", dowipe,
  452. X      "?", "get this list of extended commands", doextlist,
  453. X      NULL, NULL, donull
  454. X  };
  455. X  
  456. X! char
  457. X  unctrl(sym)
  458. X  char sym;
  459. X  {
  460. X!     return (sym >= ('A' & 037) && sym <= ('Z' & 037)) ? sym + 0140 : sym;
  461. X  }
  462. X  
  463. X  void
  464. X  rhack(cmd)
  465. X  register char *cmd;
  466. X--- 577,608 ----
  467. X      "rub", "rub a lamp", dorub,
  468. X      "sit", "sit down", dosit,
  469. X      "turn", "turn undead", doturn,
  470. X!     "untrap", "untrap something", dountrap,
  471. X!     "wipe", "wipe off your face", dowipe,
  472. X      "?", "get this list of extended commands", doextlist,
  473. X      NULL, NULL, donull
  474. X  };
  475. X  
  476. X! #ifdef STUPID_CPP
  477. X! static char
  478. X  unctrl(sym)
  479. X  char sym;
  480. X  {
  481. X!     return (sym >= C('a') && sym <= C('z')) ? sym + 0140 : sym;
  482. X  }
  483. X  
  484. X+ static char
  485. X+ unmeta(sym)
  486. X+ char sym;
  487. X+ {
  488. X+     return (sym & 0x7f);
  489. X+ }
  490. X+ #else
  491. X+ #define unctrl(c)    ((c) <= C('z') ? (0x60 | (c)) : (c))
  492. X+ #define unmeta(c)    (0x7f & (c))
  493. X+ #endif
  494. X+ 
  495. X+ 
  496. X  void
  497. X  rhack(cmd)
  498. X  register char *cmd;
  499. X***************
  500. X*** 631,637 ****
  501. X          domove();
  502. X          return;
  503. X      }
  504. X!     if(!flags.num_pad && movecmd(lowc(*cmd))) {
  505. X          flags.run = 1;
  506. X      rush:
  507. X          if(firsttime){
  508. X--- 643,649 ----
  509. X          domove();
  510. X          return;
  511. X      }
  512. X!     if(movecmd(flags.num_pad ? unmeta(*cmd) : lowc(*cmd))) {
  513. X          flags.run = 1;
  514. X      rush:
  515. X          if(firsttime){
  516. X*** src/Old/do.c    Wed Sep  6 15:40:48 1989
  517. X--- src/do.c    Mon Aug 28 15:54:42 1989
  518. X***************
  519. X*** 318,330 ****
  520. X      if(u.uswallow)
  521. X          mpickobj(u.ustuck,obj);
  522. X      else  {
  523. X-         obj->ox = u.ux;
  524. X-         obj->oy = u.uy;
  525. X          obj->nobj = fobj;
  526. X          fobj = obj;
  527. X!         levl[u.ux][u.uy].omask = 1;
  528. X          if(Invisible) newsym(u.ux,u.uy);
  529. X!         subfrombill(obj);
  530. X          stackobj(obj);
  531. X      }
  532. X  }
  533. X--- 318,328 ----
  534. X      if(u.uswallow)
  535. X          mpickobj(u.ustuck,obj);
  536. X      else  {
  537. X          obj->nobj = fobj;
  538. X          fobj = obj;
  539. X!         place_object(obj, u.ux, u.uy);
  540. X          if(Invisible) newsym(u.ux,u.uy);
  541. X!         if(obj != uball) subfrombill(obj);
  542. X          stackobj(obj);
  543. X      }
  544. X  }
  545. X***************
  546. X*** 360,371 ****
  547. X          return(1);
  548. X      }
  549. X      if(Levitation) {
  550. X- #ifdef STRONGHOLD
  551. X          pline("You're floating high above the %s.",
  552. X!               levl[u.ux][u.uy].typ == STAIRS ? "stairs" : "ladder");
  553. X! #else
  554. X!         pline("You're floating high above the stairs.");
  555. X  #endif
  556. X          return(0);
  557. X      }
  558. X  
  559. X--- 358,369 ----
  560. X          return(1);
  561. X      }
  562. X      if(Levitation) {
  563. X          pline("You're floating high above the %s.",
  564. X!             levl[u.ux][u.uy].typ == STAIRS ? "stairs" :
  565. X! #ifdef STRONGHOLD
  566. X!             levl[u.ux][u.uy].typ == LADDER ? "ladder" :
  567. X  #endif
  568. X+             "trapdoor");
  569. X          return(0);
  570. X      }
  571. X  
  572. X***************
  573. X*** 726,732 ****
  574. X      setsee();
  575. X      seeobjs();    /* make old cadavers disappear - riv05!a3 */
  576. X      docrt();
  577. X!     if(!flags.nopick && (levl[u.ux][u.uy].omask || levl[u.ux][u.uy].gmask))
  578. X          pickup(1);
  579. X      else read_engr_at(u.ux,u.uy);
  580. X  #ifdef HARD
  581. X--- 724,730 ----
  582. X      setsee();
  583. X      seeobjs();    /* make old cadavers disappear - riv05!a3 */
  584. X      docrt();
  585. X!     if(!flags.nopick && (OBJ_AT(u.ux, u.uy) || levl[u.ux][u.uy].gmask))
  586. X          pickup(1);
  587. X      else read_engr_at(u.ux,u.uy);
  588. X  #ifdef HARD
  589. X*** src/Old/dog.c    Wed Sep  6 15:42:02 1989
  590. X--- src/dog.c    Wed Aug 30 18:49:01 1989
  591. X***************
  592. X*** 260,266 ****
  593. X          case CARROT:
  594. X              return (herbi ? DOGFOOD : MANFOOD);
  595. X          default:
  596. X! #ifdef SLIME_MOLD
  597. X              return (obj->otyp > SLIME_MOLD ?
  598. X  #else
  599. X              return (obj->otyp > CLOVE_OF_GARLIC ?
  600. X--- 260,266 ----
  601. X          case CARROT:
  602. X              return (herbi ? DOGFOOD : MANFOOD);
  603. X          default:
  604. X! #ifdef TUTTI_FRUTTI
  605. X              return (obj->otyp > SLIME_MOLD ?
  606. X  #else
  607. X              return (obj->otyp > CLOVE_OF_GARLIC ?
  608. X***************
  609. X*** 308,315 ****
  610. X      mtmp->mflee = 0;
  611. X      mtmp->mfleetim = 0;
  612. X      if(mtmp->mtame || mtmp->mfroz ||
  613. X! #ifdef WORM
  614. X!        mtmp->wormno ||
  615. X  #endif
  616. X         mtmp->isshk || mtmp->isgd ||
  617. X  #if defined(ALTARS) && defined(THEOLOGY)
  618. X--- 308,315 ----
  619. X      mtmp->mflee = 0;
  620. X      mtmp->mfleetim = 0;
  621. X      if(mtmp->mtame || mtmp->mfroz ||
  622. X! #ifdef MEDUSA
  623. X!        mtmp->data == &mons[PM_MEDUSA] ||
  624. X  #endif
  625. X         mtmp->isshk || mtmp->isgd ||
  626. X  #if defined(ALTARS) && defined(THEOLOGY)
  627. X***************
  628. X*** 321,328 ****
  629. X         is_human(mtmp->data) || is_demon(mtmp->data))
  630. X  #endif
  631. X          return(0);
  632. X-     /* no tame long worms so they don't try to follow you down stairs
  633. X-        or get in your way */
  634. X      if(obj) {
  635. X          if(dogfood(mtmp, obj) >= MANFOOD) return(0);
  636. X          if(cansee(mtmp->mx,mtmp->my))
  637. X--- 321,326 ----
  638. X*** src/Old/dogmove.c    Wed Sep  6 15:42:19 1989
  639. X--- src/dogmove.c    Tue Sep  5 10:23:58 1989
  640. X***************
  641. X*** 247,253 ****
  642. X          /* dog eschews cursed objects */
  643. X          /* but likes dog food */
  644. X          obj = fobj;
  645. X!         if(levl[nx][ny].omask) 
  646. X            while(obj){
  647. X              if(obj->ox != nx || obj->oy != ny)
  648. X              goto nextobj;
  649. X--- 247,253 ----
  650. X          /* dog eschews cursed objects */
  651. X          /* but likes dog food */
  652. X          obj = fobj;
  653. X!         if(OBJ_AT(nx, ny)) 
  654. X            while(obj){
  655. X              if(obj->ox != nx || obj->oy != ny)
  656. X              goto nextobj;
  657. X*** src/Old/dokick.c    Wed Sep  6 15:42:37 1989
  658. X--- src/dokick.c    Tue Sep  5 21:34:52 1989
  659. X***************
  660. X*** 263,269 ****
  661. X          }
  662. X          /* stop on a zorkmid */
  663. X          if(levl[bhitpos.x][bhitpos.y].gmask ||
  664. X!                      levl[bhitpos.x][bhitpos.y].omask) {
  665. X              tmp_at(-1, -1); /* close call */
  666. X              return (struct monst *)0;
  667. X          }
  668. X--- 263,269 ----
  669. X          }
  670. X          /* stop on a zorkmid */
  671. X          if(levl[bhitpos.x][bhitpos.y].gmask ||
  672. X!                      OBJ_AT(bhitpos.x, bhitpos.y)) {
  673. X              tmp_at(-1, -1); /* close call */
  674. X              return (struct monst *)0;
  675. X          }
  676. X***************
  677. X*** 281,293 ****
  678. X  #ifdef KICK
  679. X  static int
  680. X  kick_object(x, y)
  681. X! register int x, y;
  682. X  {
  683. X!     register int range, odx, ody, cnt = 0;
  684. X      register struct monst *mon;
  685. X!     register struct gold *gold;
  686. X      register struct obj *otmp, *obj;
  687. X!     register boolean costly = FALSE;
  688. X  
  689. X      /* if a pile, the "top" object gets kicked */
  690. X      for (otmp = fobj; otmp; otmp = otmp->nobj)
  691. X--- 281,293 ----
  692. X  #ifdef KICK
  693. X  static int
  694. X  kick_object(x, y)
  695. X! int x, y;
  696. X  {
  697. X!     int range, odx, ody, cnt = 0;
  698. X      register struct monst *mon;
  699. X!     struct gold *gold;
  700. X      register struct obj *otmp, *obj;
  701. X!     boolean costly = FALSE;
  702. X  
  703. X      /* if a pile, the "top" object gets kicked */
  704. X      for (otmp = fobj; otmp; otmp = otmp->nobj)
  705. X***************
  706. X*** 321,339 ****
  707. X          long zm;
  708. X          gold = g_at(x, y);
  709. X          zm = gold->amount;
  710. X          if(range < 2 || zm > 300L) /* arbitrary */
  711. X              return(0);
  712. X!         else {
  713. X!             freegold(gold);
  714. X!             if(!levl[x][y].mmask) newsym(x, y);
  715. X!             if(mon = ghit(u.dx, u.dy, range)) {
  716. X              setmangry(mon); /* not a means for payment to shk */
  717. X              if(ghitm(mon, zm)) /* was it caught? */
  718. X                  return(1);
  719. X-             }
  720. X-             mkgold(zm, bhitpos.x, bhitpos.y);
  721. X-             if(cansee(bhitpos.x, bhitpos.y)) prl(bhitpos.x,bhitpos.y);
  722. X          }
  723. X          return(1);
  724. X      }
  725. X  
  726. X--- 321,358 ----
  727. X          long zm;
  728. X          gold = g_at(x, y);
  729. X          zm = gold->amount;
  730. X+         if(IS_ROCK(levl[x][y].typ)) {
  731. X+             if ((!martial() && rn2(20) > ACURR(A_DEX))
  732. X+ #ifdef POLYSELF
  733. X+                 || IS_ROCK(levl[u.ux][u.uy].typ)
  734. X+ #endif
  735. X+                                 ) {
  736. X+                 pline("%s doesn't come loose.",
  737. X+                     Blind ? "It" : "The gold");
  738. X+                 return(!rn2(3) || martial());
  739. X+             }
  740. X+             pline("%s comes loose.", Blind ? "It" : "The gold");
  741. X+             freegold(gold);
  742. X+             newsym(x, y);
  743. X+             mkgold(zm, u.ux, u.uy);
  744. X+             if (Invisible
  745. X+ #ifdef POLYSELF
  746. X+                     && !u.uundetected
  747. X+ #endif
  748. X+                         ) newsym(u.ux, u.uy);
  749. X+             return(1);
  750. X+         }
  751. X          if(range < 2 || zm > 300L) /* arbitrary */
  752. X              return(0);
  753. X!         freegold(gold);
  754. X!         newsym(x, y);
  755. X!         if(mon = ghit(u.dx, u.dy, range)) {
  756. X              setmangry(mon); /* not a means for payment to shk */
  757. X              if(ghitm(mon, zm)) /* was it caught? */
  758. X                  return(1);
  759. X          }
  760. X+         mkgold(zm, bhitpos.x, bhitpos.y);
  761. X+         if(cansee(bhitpos.x, bhitpos.y)) prl(bhitpos.x,bhitpos.y);
  762. X          return(1);
  763. X      }
  764. X  
  765. X***************
  766. X*** 378,388 ****
  767. X              You("smash the %s!", xname(obj));
  768. X              if(costly) addtobill(obj, FALSE);
  769. X              potionbreathe(obj);
  770. X!             delobj(obj);    /* takes care of omask */
  771. X              return(1);
  772. X          }
  773. X      }
  774. X  
  775. X      /* too heavy to move. make sure not to call bhit  */
  776. X      /* in this function when range < 2 (a display bug */
  777. X      /* results otherwise).                */
  778. X--- 397,434 ----
  779. X              You("smash the %s!", xname(obj));
  780. X              if(costly) addtobill(obj, FALSE);
  781. X              potionbreathe(obj);
  782. X!             delobj(obj);
  783. X              return(1);
  784. X          }
  785. X      }
  786. X  
  787. X+     if(IS_ROCK(levl[x][y].typ)) {
  788. X+         if ((!martial() && rn2(20) > ACURR(A_DEX))
  789. X+ #ifdef POLYSELF
  790. X+                 || IS_ROCK(levl[u.ux][u.uy].typ)
  791. X+ #endif
  792. X+                                 ) {
  793. X+             if (Blind) pline("It doesn't come loose.");
  794. X+             else pline("The %s do%sn't come loose.",
  795. X+                 distant_name(obj, xname),
  796. X+                 (obj->quan==1) ? "es" : "");
  797. X+             return(!rn2(3) || martial());
  798. X+         }
  799. X+         if (Blind) pline("It comes loose.");
  800. X+         else pline("The %s come%s loose.", distant_name(obj, xname),
  801. X+             (obj->quan==1) ? "s" : "");
  802. X+         move_object(obj, u.ux, u.uy);
  803. X+         newsym(x, y);
  804. X+         stackobj(obj);
  805. X+         if (Invisible
  806. X+ #ifdef POLYSELF
  807. X+                 && !u.uundetected
  808. X+ #endif
  809. X+                         ) newsym(u.ux, u.uy);
  810. X+         if (costly && !costly_spot(u.ux, u.uy)) addtobill(obj, FALSE);
  811. X+         return(1);
  812. X+     }
  813. X+ 
  814. X      /* too heavy to move. make sure not to call bhit  */
  815. X      /* in this function when range < 2 (a display bug */
  816. X      /* results otherwise).                */
  817. X***************
  818. X*** 393,409 ****
  819. X          return(0);
  820. X      }
  821. X  
  822. X!     if(cnt > 1) {
  823. X!         /* Needed to fool bhit's display-cleanup to show */
  824. X!         /* immediately the next object in the pile.  We  */
  825. X!         /* know here that the object will move, so there */
  826. X!         /* is no need to worry about omask.         */
  827. X!         obj->ox = u.ux;
  828. X!         obj->oy = u.uy;
  829. X!     } else {
  830. X!         levl[x][y].omask = 0;
  831. X!         if(!levl[x][y].gmask) newsym(x, y);
  832. X!     }
  833. X  
  834. X      mon = bhit(u.dx, u.dy, range, obj->olet,
  835. X              (int (*)()) 0, (int (*)()) 0, obj);
  836. X--- 439,450 ----
  837. X          return(0);
  838. X      }
  839. X  
  840. X!     /* Needed to fool bhit's display-cleanup to show immediately    */
  841. X!     /* the next object in the pile.  We know here that the object    */
  842. X!     /* will move, so there is no need to worry about the location,    */
  843. X!     /* which merely needs to be something other than ox, oy.    */
  844. X!     move_object(obj, u.ux, u.uy);
  845. X!     if(cnt == 1 && !levl[x][y].mmask) newsym(x, y);
  846. X  
  847. X      mon = bhit(u.dx, u.dy, range, obj->olet,
  848. X              (int (*)()) 0, (int (*)()) 0, obj);
  849. X***************
  850. X*** 417,425 ****
  851. X          if(thitmonst(mon, obj)) return(1);
  852. X      }
  853. X      if(costly && !costly_spot(bhitpos.x,bhitpos.y)) addtobill(obj, FALSE);
  854. X!     obj->ox = bhitpos.x;
  855. X!     obj->oy = bhitpos.y;
  856. X!     levl[obj->ox][obj->oy].omask = 1;
  857. X      stackobj(obj);
  858. X      if(!levl[obj->ox][obj->oy].mmask) newsym(obj->ox, obj->oy);
  859. X      return(1);
  860. X--- 458,464 ----
  861. X          if(thitmonst(mon, obj)) return(1);
  862. X      }
  863. X      if(costly && !costly_spot(bhitpos.x,bhitpos.y)) addtobill(obj, FALSE);
  864. X!     move_object(obj, bhitpos.x, bhitpos.y);
  865. X      stackobj(obj);
  866. X      if(!levl[obj->ox][obj->oy].mmask) newsym(obj->ox, obj->oy);
  867. X      return(1);
  868. X***************
  869. X*** 498,504 ****
  870. X          return(1);
  871. X      }
  872. X  
  873. X!     if((maploc->omask || maploc->gmask) && !Levitation) {
  874. X          if(kick_object(x, y)) return(1);
  875. X          else goto ouch;
  876. X      }
  877. X--- 537,543 ----
  878. X          return(1);
  879. X      }
  880. X  
  881. X!     if((OBJ_AT(x, y) || maploc->gmask) && !Levitation) {
  882. X          if(kick_object(x, y)) return(1);
  883. X          else goto ouch;
  884. X      }
  885. X*** src/Old/dothrow.c    Wed Sep  6 15:43:02 1989
  886. X--- src/dothrow.c    Mon Aug 21 14:52:34 1989
  887. X***************
  888. X*** 160,171 ****
  889. X          if(obj->otyp == CRYSKNIFE)
  890. X              obj->otyp = WORM_TOOTH;
  891. X  #endif
  892. X-         obj->ox = bhitpos.x;
  893. X-         obj->oy = bhitpos.y;
  894. X          obj->nobj = fobj;
  895. X          fobj = obj;
  896. X!         levl[bhitpos.x][bhitpos.y].omask = 1;
  897. X!         if(obj->unpaid && costly_spot(bhitpos.x, bhitpos.y))
  898. X              subfrombill(obj);
  899. X          stackobj(obj);
  900. X          if(obj == uball &&
  901. X--- 160,171 ----
  902. X          if(obj->otyp == CRYSKNIFE)
  903. X              obj->otyp = WORM_TOOTH;
  904. X  #endif
  905. X          obj->nobj = fobj;
  906. X          fobj = obj;
  907. X!         place_object(obj, bhitpos.x, bhitpos.y);
  908. X!         if(obj != uball && costly_spot(bhitpos.x, bhitpos.y) &&
  909. X!            !(mon && mon->isshk && bhitpos.x == mon->mx &&
  910. X!              bhitpos.y == mon->my && !(obj->unpaid)))
  911. X              subfrombill(obj);
  912. X          stackobj(obj);
  913. X          if(obj == uball &&
  914. X*** src/Old/eat.c    Wed Sep  6 15:43:23 1989
  915. X--- src/eat.c    Wed Sep  6 15:12:34 1989
  916. X***************
  917. X*** 461,466 ****
  918. X--- 461,467 ----
  919. X                  tmp = 1;
  920. X                  break;
  921. X              case DAGGER:
  922. X+             case ATHAME:
  923. X  #ifdef WORM
  924. X              case CRYSKNIFE:
  925. X  #endif
  926. X***************
  927. X*** 541,547 ****
  928. X  #endif
  929. X              if(rn2(2)
  930. X  #ifdef POLYSELF
  931. X!                 && u.usym == S_HUMAN
  932. X  #endif
  933. X                              ){
  934. X                  You("vomit.");
  935. X--- 542,548 ----
  936. X  #endif
  937. X              if(rn2(2)
  938. X  #ifdef POLYSELF
  939. X!                 && !carnivorous(uasmon)
  940. X  #endif
  941. X                              ){
  942. X                  You("vomit.");
  943. X***************
  944. X*** 568,573 ****
  945. X--- 569,589 ----
  946. X                      "Yum!  Your fave fruit!");
  947. X              else
  948. X  #endif
  949. X+ #ifdef UNIX
  950. X+             if (otmp->otyp == APPLE || otmp->otyp == PEAR) {
  951. X+                 if (!Hallucination)
  952. X+                 pline("Core dumped.");
  953. X+                 else {
  954. X+     /* This is based on an old Usenet joke, a fake a.out manual page */
  955. X+                 int x = rnd(100);
  956. X+                 if (x <= 75)
  957. X+                     pline("Segmentation fault -- core dumped.");
  958. X+                 else if (x <= 99)
  959. X+                     pline("Bus error -- core dumped.");
  960. X+                 else pline("Yo' mama -- core dumped.");
  961. X+                 }
  962. X+             } else
  963. X+ #endif
  964. X              {
  965. X                  int oldquan = otmp->quan;
  966. X                  otmp->quan = 1;
  967. X***************
  968. X*** 751,756 ****
  969. X--- 767,773 ----
  970. X              flags.botl = 1;
  971. X              bot();
  972. X              You("die from starvation.");
  973. X+             killer = "starvation";
  974. X              done(STARVING);
  975. X          }
  976. X      }
  977. X***************
  978. X*** 795,811 ****
  979. X  struct obj *
  980. X  floorfood(verb,corpseonly)
  981. X  char *verb;
  982. X! int corpseonly;
  983. X  {
  984. X      register struct obj *otmp;
  985. X  
  986. X      /* Is there some food (probably a heavy corpse) here on the ground? */
  987. X      if(!Levitation && !u.uswallow) {
  988. X!     if(levl[u.ux][u.uy].omask)
  989. X          for(otmp = fobj; otmp; otmp = otmp->nobj) {
  990. X          if(otmp->ox == u.ux && otmp->oy == u.uy &&
  991. X!            (otmp->otyp==CORPSE ||
  992. X!            (!corpseonly && otmp->olet == FOOD_SYM))) {
  993. X              pline("There %s %s here; %s %s? ",
  994. X                  (otmp->quan == 1) ? "is" : "are",
  995. X                  doname(otmp), verb,
  996. X--- 812,827 ----
  997. X  struct obj *
  998. X  floorfood(verb,corpseonly)
  999. X  char *verb;
  1000. X! boolean corpseonly;
  1001. X  {
  1002. X      register struct obj *otmp;
  1003. X  
  1004. X      /* Is there some food (probably a heavy corpse) here on the ground? */
  1005. X      if(!Levitation && !u.uswallow) {
  1006. X!     if(OBJ_AT(u.ux, u.uy))
  1007. X          for(otmp = fobj; otmp; otmp = otmp->nobj) {
  1008. X          if(otmp->ox == u.ux && otmp->oy == u.uy &&
  1009. X!            (corpseonly ? otmp->otyp==CORPSE : otmp->olet==FOOD_SYM)) {
  1010. X              pline("There %s %s here; %s %s? ",
  1011. X                  (otmp->quan == 1) ? "is" : "are",
  1012. X                  doname(otmp), verb,
  1013. X*** src/Old/end.c    Wed Sep  6 15:43:49 1989
  1014. X--- src/end.c    Tue Sep  5 21:35:16 1989
  1015. X***************
  1016. X*** 336,342 ****
  1017. X      if(!done_stopprint)
  1018. X          Printf("Goodbye %s the %s...\n\n", buf2,
  1019. X  #ifdef ENDGAME
  1020. X!            how != ASCENDED ? pl_character : "Demigod");
  1021. X  #else
  1022. X             pl_character);
  1023. X  #endif
  1024. X--- 336,343 ----
  1025. X      if(!done_stopprint)
  1026. X          Printf("Goodbye %s the %s...\n\n", buf2,
  1027. X  #ifdef ENDGAME
  1028. X!            how != ASCENDED ? pl_character : 
  1029. X!            flags.female ? "Demigoddess" : "Demigod");
  1030. X  #else
  1031. X             pl_character);
  1032. X  #endif
  1033. X***************
  1034. X*** 354,360 ****
  1035. X        if(how == ASCENDED) u.urexp *= 2;
  1036. X  #endif
  1037. X      }
  1038. X!     if(how == ESCAPED) {
  1039. X          register struct monst *mtmp;
  1040. X          register struct obj *otmp;
  1041. X          long i;
  1042. X--- 355,365 ----
  1043. X        if(how == ASCENDED) u.urexp *= 2;
  1044. X  #endif
  1045. X      }
  1046. X!     if(how == ESCAPED
  1047. X! #ifdef ENDGAME
  1048. X!             || how == ASCENDED
  1049. X! #endif
  1050. X!                     ) {
  1051. X          register struct monst *mtmp;
  1052. X          register struct obj *otmp;
  1053. X          long i;
  1054. X***************
  1055. X*** 372,382 ****
  1056. X--- 377,399 ----
  1057. X                  mtmp = mtmp->nmon;
  1058. X              }
  1059. X              if(!done_stopprint)
  1060. X+ #ifdef ENDGAME
  1061. X+             Printf("\n%s with %ld points,\n",
  1062. X+             how==ASCENDED ? "went to your reward"
  1063. X+                 : "escaped from the dungeon",
  1064. X+ #else
  1065. X              Printf("\nescaped from the dungeon with %ld points,\n",
  1066. X+ #endif
  1067. X              u.urexp);
  1068. X          } else
  1069. X          if(!done_stopprint)
  1070. X+ #ifdef ENDGAME
  1071. X+           Printf("You %s with %ld points,\n",
  1072. X+             how==ASCENDED ? "went to your reward"
  1073. X+                 : "escaped from the dungeon",
  1074. X+ #else
  1075. X            Printf("You escaped from the dungeon with %ld points,\n",
  1076. X+ #endif
  1077. X              u.urexp);
  1078. X          get_all_from_box(); /* don't forget things in boxes and bags */
  1079. X          for(otmp = invent; otmp; otmp = otmp->nobj) {
  1080. X***************
  1081. X*** 425,431 ****
  1082. X    Printf("You were level %u with a maximum of %d hit points when you %s.\n",
  1083. X          u.ulevel, u.uhpmax, ends[how]);
  1084. X      if(how == ESCAPED && !done_stopprint){
  1085. X!         getret();    /* all those pieces of coloured glass ... */
  1086. X          cls();
  1087. X      }
  1088. X  #if (defined(WIZARD) || defined(EXPLORE_MODE)) && !defined(LOGFILE)
  1089. X--- 442,448 ----
  1090. X    Printf("You were level %u with a maximum of %d hit points when you %s.\n",
  1091. X          u.ulevel, u.uhpmax, ends[how]);
  1092. X      if(how == ESCAPED && !done_stopprint){
  1093. X!         getret();    /* all those pieces of colored glass ... */
  1094. X          cls();
  1095. X      }
  1096. X  #if (defined(WIZARD) || defined(EXPLORE_MODE)) && !defined(LOGFILE)
  1097. X*** src/Old/engrave.c    Wed Sep  6 15:44:12 1989
  1098. X--- src/engrave.c    Fri Sep  1 14:29:05 1989
  1099. X***************
  1100. X*** 4,11 ****
  1101. X  
  1102. X  #include    "hack.h"
  1103. X  
  1104. X- static void del_engr P((struct engr *));
  1105. X- 
  1106. X  struct engr {
  1107. X      struct engr *nxt_engr;
  1108. X      char *engr_txt;
  1109. X--- 4,9 ----
  1110. X***************
  1111. X*** 20,25 ****
  1112. X--- 18,25 ----
  1113. X  #define POLY    5    /* temporary type - for polymorphing engraving */
  1114. X  } *head_engr;
  1115. X  
  1116. X+ static void del_engr P((struct engr *));
  1117. X+ 
  1118. X  /* random engravings */
  1119. X  const char *random_engr[] =
  1120. X               {"Elbereth", "ad ae?ar um",
  1121. X***************
  1122. X*** 443,449 ****
  1123. X              nomovemsg = "You finish writing.";
  1124. X              if(type != MARK)
  1125. X              nomovemsg = "You finish engraving.";
  1126. X!             if(otmp->olet != WAND_SYM)  {
  1127. X                  if(otmp->olet == WEAPON_SYM)
  1128. X                      Your("%s dull.",
  1129. X                             aobjnam(otmp, "get"));
  1130. X--- 443,449 ----
  1131. X              nomovemsg = "You finish writing.";
  1132. X              if(type != MARK)
  1133. X              nomovemsg = "You finish engraving.";
  1134. X!             if(otmp->olet != WAND_SYM && otmp->otyp != ATHAME)  {
  1135. X                  if(otmp->olet == WEAPON_SYM)
  1136. X                      Your("%s dull.",
  1137. X                             aobjnam(otmp, "get"));
  1138. X*** src/Old/hack.c    Wed Sep  6 15:45:35 1989
  1139. X--- src/hack.c    Wed Sep  6 11:53:58 1989
  1140. X***************
  1141. X*** 78,84 ****
  1142. X      register struct obj *otmp;
  1143. X      register struct trap *ttmp;
  1144. X      register struct    monst *mtmp;
  1145. X-     xchar oldrx, oldry;
  1146. X  
  1147. X  #ifdef POLYSELF
  1148. X      if (passes_walls(uasmon)) return 0;
  1149. X--- 78,83 ----
  1150. X***************
  1151. X*** 150,161 ****
  1152. X                  delobj(otmp);
  1153. X                  continue;
  1154. X              }
  1155. X!             oldrx = otmp->ox;
  1156. X!             oldry = otmp->oy;
  1157. X!             otmp->ox = rx;
  1158. X!             otmp->oy = ry;
  1159. X!             set_omask(oldrx, oldry);
  1160. X!             levl[rx][ry].omask = 1;
  1161. X              /* pobj(otmp); */
  1162. X              if(cansee(rx,ry)) atl(rx,ry,otmp->olet);
  1163. X              newsym(u.ux+u.dx, u.uy+u.dy);
  1164. X--- 149,155 ----
  1165. X                  delobj(otmp);
  1166. X                  continue;
  1167. X              }
  1168. X!             move_object(otmp, rx, ry);
  1169. X              /* pobj(otmp); */
  1170. X              if(cansee(rx,ry)) atl(rx,ry,otmp->olet);
  1171. X              newsym(u.ux+u.dx, u.uy+u.dy);
  1172. X***************
  1173. X*** 208,224 ****
  1174. X  register struct obj *obj;
  1175. X  register xchar ox, oy;
  1176. X  {
  1177. X-     register xchar ox2 = obj->ox, oy2= obj->oy;
  1178. X- 
  1179. X      /* Some dirty programming to get display right */
  1180. X      freeobj(obj);
  1181. X      unpobj(obj);
  1182. X      obj->nobj = fobj;
  1183. X      fobj = obj;
  1184. X!     obj->ox = ox;
  1185. X!     obj->oy = oy;
  1186. X!     set_omask(ox2,oy2);
  1187. X!     levl[ox][oy].omask = 1;
  1188. X  }
  1189. X  
  1190. X  #ifdef SINKS
  1191. X--- 202,213 ----
  1192. X  register struct obj *obj;
  1193. X  register xchar ox, oy;
  1194. X  {
  1195. X      /* Some dirty programming to get display right */
  1196. X      freeobj(obj);
  1197. X      unpobj(obj);
  1198. X      obj->nobj = fobj;
  1199. X      fobj = obj;
  1200. X!     move_object(obj, ox, oy);
  1201. X  }
  1202. X  
  1203. X  #ifdef SINKS
  1204. X***************
  1205. X*** 234,240 ****
  1206. X  # endif
  1207. X          You("crash to the floor!");
  1208. X          losehp((rn1(10, 20 - (int)ACURR(A_CON))),"fall onto a sink");
  1209. X!         if(levl[u.ux][u.uy].omask)
  1210. X          for(obj=fobj; obj; obj=obj->nobj)
  1211. X              if(obj->ox == u.ux && obj->oy == u.uy &&
  1212. X                 obj->olet == WEAPON_SYM) {
  1213. X--- 223,229 ----
  1214. X  # endif
  1215. X          You("crash to the floor!");
  1216. X          losehp((rn1(10, 20 - (int)ACURR(A_CON))),"fall onto a sink");
  1217. X!         if(OBJ_AT(u.ux, u.uy))
  1218. X          for(obj=fobj; obj; obj=obj->nobj)
  1219. X              if(obj->ox == u.ux && obj->oy == u.uy &&
  1220. X                 obj->olet == WEAPON_SYM) {
  1221. X***************
  1222. X*** 304,310 ****
  1223. X  domove() {
  1224. X      register struct monst *mtmp = (struct monst *)0;
  1225. X      register struct rm *tmpr,*ust;
  1226. X!     register xchar x,y,xx,yy;
  1227. X      struct trap *trap;
  1228. X  
  1229. X      u_wipe_engr(rnd(5));
  1230. X--- 293,299 ----
  1231. X  domove() {
  1232. X      register struct monst *mtmp = (struct monst *)0;
  1233. X      register struct rm *tmpr,*ust;
  1234. X!     register xchar x,y;
  1235. X      struct trap *trap;
  1236. X  
  1237. X      u_wipe_engr(rnd(5));
  1238. X***************
  1239. X*** 315,326 ****
  1240. X          return;
  1241. X      }
  1242. X      if(u.uswallow) {
  1243. X          u.dx = u.dy = 0;
  1244. X          xx = u.ux;
  1245. X          yy = u.uy;
  1246. X          x = u.ux = u.ustuck->mx;
  1247. X          y = u.uy = u.ustuck->my;
  1248. X!         if(xx != u.ustuck->mx || yy != u.ustuck->my) newsym(xx,yy);
  1249. X      } else {
  1250. X          x = u.ux + u.dx;
  1251. X          y = u.uy + u.dy;
  1252. X--- 304,318 ----
  1253. X          return;
  1254. X      }
  1255. X      if(u.uswallow) {
  1256. X+         register xchar xx,yy;
  1257. X+ 
  1258. X          u.dx = u.dy = 0;
  1259. X          xx = u.ux;
  1260. X          yy = u.uy;
  1261. X          x = u.ux = u.ustuck->mx;
  1262. X          y = u.uy = u.ustuck->my;
  1263. X!         if(xx != x || yy != y) newsym(xx,yy);
  1264. X!         mtmp = u.ustuck;
  1265. X      } else {
  1266. X          x = u.ux + u.dx;
  1267. X          y = u.uy + u.dy;
  1268. X***************
  1269. X*** 369,399 ****
  1270. X  #endif
  1271. X              }
  1272. X          }
  1273. X      }
  1274. X  
  1275. X      u.ux0 = u.ux;
  1276. X      u.uy0 = u.uy;
  1277. X-     /* attack monster */
  1278. X      tmpr = &levl[x][y];
  1279. X!     if (tmpr->mmask) {
  1280. X!         mtmp = m_at(x,y);
  1281. X!         /* Don't attack if you're running */
  1282. X!         if (flags.run && !mtmp->mimic &&
  1283. X!             (Blind ? Telepat : (!mtmp->minvis || See_invisible))) {
  1284. X!             nomul(0);
  1285. X!             flags.move = 0;
  1286. X!             return;
  1287. X!         }
  1288. X!     }
  1289. X!     if(mtmp || u.uswallow) {
  1290. X          nomul(0);
  1291. X          gethungry();
  1292. X          if(multi < 0) return;    /* we just fainted */
  1293. X  
  1294. X          /* try to attack; note that it might evade */
  1295. X!         if(attack(u.uswallow ? u.ustuck : mtmp))
  1296. X!             return;
  1297. X      }
  1298. X      /* not attacking an animal, so we try to move */
  1299. X  #ifdef POLYSELF
  1300. X      if(!uasmon->mmove) {
  1301. X--- 361,393 ----
  1302. X  #endif
  1303. X              }
  1304. X          }
  1305. X+         if (levl[x][y].mmask) {
  1306. X+             mtmp = m_at(x,y);
  1307. X+             /* Don't attack if you're running */
  1308. X+             if (flags.run && !mtmp->mimic &&
  1309. X+                     (Blind ? Telepat :
  1310. X+                         (!mtmp->minvis || See_invisible))) {
  1311. X+                 nomul(0);
  1312. X+                 flags.move = 0;
  1313. X+                 return;
  1314. X+             }
  1315. X+         }
  1316. X      }
  1317. X  
  1318. X      u.ux0 = u.ux;
  1319. X      u.uy0 = u.uy;
  1320. X      tmpr = &levl[x][y];
  1321. X! 
  1322. X!     /* attack monster */
  1323. X!     if(mtmp) {
  1324. X          nomul(0);
  1325. X          gethungry();
  1326. X          if(multi < 0) return;    /* we just fainted */
  1327. X  
  1328. X          /* try to attack; note that it might evade */
  1329. X!         if(attack(mtmp)) return;
  1330. X      }
  1331. X+ 
  1332. X      /* not attacking an animal, so we try to move */
  1333. X  #ifdef POLYSELF
  1334. X      if(!uasmon->mmove) {
  1335. X***************
  1336. X*** 449,455 ****
  1337. X  #endif
  1338. X      ust = &levl[u.ux][u.uy];
  1339. X      if(bad_rock(x,y) ||
  1340. X!        (u.dx && u.dy && (IS_DOOR(tmpr->typ) || IS_DOOR(ust->typ)))){
  1341. X          flags.move = 0;
  1342. X          nomul(0);
  1343. X          return;
  1344. X--- 443,453 ----
  1345. X  #endif
  1346. X      ust = &levl[u.ux][u.uy];
  1347. X      if(bad_rock(x,y) ||
  1348. X!        (u.dx && u.dy
  1349. X! #ifdef POLYSELF
  1350. X!             && !passes_walls(uasmon)
  1351. X! #endif
  1352. X!             && (IS_DOOR(tmpr->typ) || IS_DOOR(ust->typ)))){
  1353. X          flags.move = 0;
  1354. X          nomul(0);
  1355. X          return;
  1356. X***************
  1357. X*** 492,500 ****
  1358. X  
  1359. X          movobj(uball, uchain->ox, uchain->oy);
  1360. X          unpobj(uball);        /* BAH %% */
  1361. X!         uchain->ox = u.ux;
  1362. X!         uchain->oy = u.uy;
  1363. X!         ust->omask = 1;
  1364. X          nomul(-2);
  1365. X          nomovemsg = "";
  1366. X      nodrag:    ;
  1367. X--- 490,496 ----
  1368. X  
  1369. X          movobj(uball, uchain->ox, uchain->oy);
  1370. X          unpobj(uball);        /* BAH %% */
  1371. X!         place_object(uchain, u.ux, u.uy);
  1372. X          nomul(-2);
  1373. X          nomovemsg = "";
  1374. X      nodrag:    ;
  1375. X***************
  1376. X*** 571,577 ****
  1377. X      }
  1378. X  #ifdef POLYSELF
  1379. X      if (hides_under(uasmon))
  1380. X!         u.uundetected = (levl[u.ux][u.uy].omask || levl[u.ux][u.uy].gmask);
  1381. X      else if (u.dx || u.dy) { /* i.e. piercer */
  1382. X          if (u.usym == S_MIMIC_DEF)
  1383. X          u.usym = S_MIMIC;
  1384. X--- 567,573 ----
  1385. X      }
  1386. X  #ifdef POLYSELF
  1387. X      if (hides_under(uasmon))
  1388. X!         u.uundetected = (OBJ_AT(u.ux, u.uy) || levl[u.ux][u.uy].gmask);
  1389. X      else if (u.dx || u.dy) { /* i.e. piercer */
  1390. X          if (u.usym == S_MIMIC_DEF)
  1391. X          u.usym = S_MIMIC;
  1392. X***************
  1393. X*** 648,654 ****
  1394. X              dosinkfall();
  1395. X  #endif
  1396. X          if(!flags.nopick &&
  1397. X!            (levl[u.ux][u.uy].omask || levl[u.ux][u.uy].gmask))
  1398. X              pickup(1);
  1399. X          else read_engr_at(u.ux,u.uy);
  1400. X          if(trap = t_at(u.ux,u.uy))
  1401. X--- 644,650 ----
  1402. X              dosinkfall();
  1403. X  #endif
  1404. X          if(!flags.nopick &&
  1405. X!            (OBJ_AT(u.ux, u.uy) || levl[u.ux][u.uy].gmask))
  1406. X              pickup(1);
  1407. X          else read_engr_at(u.ux,u.uy);
  1408. X          if(trap = t_at(u.ux,u.uy))
  1409. X***************
  1410. X*** 669,675 ****
  1411. X                Blind ? "feel" : "see");
  1412. X          return(1);
  1413. X      }
  1414. X!     if(levl[u.ux][u.uy].omask == 0 && levl[u.ux][u.uy].gmask == 0) {
  1415. X          pline("There is nothing here to pick up.");
  1416. X          return(0);
  1417. X      }
  1418. X--- 665,671 ----
  1419. X                Blind ? "feel" : "see");
  1420. X          return(1);
  1421. X      }
  1422. X!     if(!OBJ_AT(u.ux, u.uy) && levl[u.ux][u.uy].gmask == 0) {
  1423. X          pline("There is nothing here to pick up.");
  1424. X          return(0);
  1425. X      }
  1426. X***************
  1427. X*** 696,702 ****
  1428. X      for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) {
  1429. X          if(x == u.ux && y == u.uy) continue;
  1430. X          if(levl[x][y].mmask && (mtmp = m_at(x,y)) && !mtmp->mimic &&
  1431. X!             (!mtmp->minvis || See_invisible || Telepat) && !mtmp->mundetected) {
  1432. X              if((flags.run != 1 && !mtmp->mtame) || (x == u.ux+u.dx && y == u.uy+u.dy))
  1433. X                  goto stop;
  1434. X          } else mtmp = 0;
  1435. X--- 692,698 ----
  1436. X      for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) {
  1437. X          if(x == u.ux && y == u.uy) continue;
  1438. X          if(levl[x][y].mmask && (mtmp = m_at(x,y)) && !mtmp->mimic &&
  1439. X!             (!mtmp->minvis || See_invisible) && !mtmp->mundetected) {
  1440. X              if((flags.run != 1 && !mtmp->mtame) || (x == u.ux+u.dx && y == u.uy+u.dy))
  1441. X                  goto stop;
  1442. X          } else mtmp = 0;
  1443. X***************
  1444. X*** 800,806 ****
  1445. X             !mtmp->mtame && !mtmp->mpeaceful &&
  1446. X             !noattacks(mtmp->data) &&
  1447. X             !mtmp->mfroz && !mtmp->msleep &&  /* aplvax!jcn */
  1448. X!            (!mtmp->minvis || See_invisible || Telepat) &&
  1449. X             !onscary(u.ux, u.uy, mtmp))
  1450. X              return(1);
  1451. X      }
  1452. X--- 796,802 ----
  1453. X             !mtmp->mtame && !mtmp->mpeaceful &&
  1454. X             !noattacks(mtmp->data) &&
  1455. X             !mtmp->mfroz && !mtmp->msleep &&  /* aplvax!jcn */
  1456. X!            (!mtmp->minvis || See_invisible) &&
  1457. X             !onscary(u.ux, u.uy, mtmp))
  1458. X              return(1);
  1459. X      }
  1460. X*** src/Old/invent.c    Wed Sep  6 15:46:23 1989
  1461. X--- src/invent.c    Tue Sep  5 21:34:56 1989
  1462. X***************
  1463. X*** 201,226 ****
  1464. X  {
  1465. X      register struct obj *otmp;
  1466. X      register int found = 0;
  1467. X-     register struct rm *lev = &levl[obj->ox][obj->oy];
  1468. X  
  1469. X-       lev->omask = 0;
  1470. X- 
  1471. X      if(obj == fobj) {
  1472. X          fobj = fobj->nobj;
  1473. X          found = 1;
  1474. X      }
  1475. X!     for(otmp = fobj; otmp; otmp = otmp->nobj) {
  1476. X           if (otmp->nobj == obj) {
  1477. X          otmp->nobj = obj->nobj;
  1478. X          found = 1;
  1479. X          }
  1480. X-         if (otmp->ox == obj->ox && otmp->oy == obj->oy) {
  1481. X-         lev->omask = 1;
  1482. X-         }
  1483. X-     }
  1484. X        if (!found) panic("error in freeobj");
  1485. X  #ifdef POLYSELF
  1486. X!     if (!levl[u.ux][u.uy].omask && !levl[u.ux][u.uy].gmask) {
  1487. X          u.uundetected = 0;
  1488. X          if (!Invisible) pru();
  1489. X      }
  1490. X--- 201,220 ----
  1491. X  {
  1492. X      register struct obj *otmp;
  1493. X      register int found = 0;
  1494. X  
  1495. X      if(obj == fobj) {
  1496. X          fobj = fobj->nobj;
  1497. X          found = 1;
  1498. X      }
  1499. X!     for(otmp = fobj; otmp; otmp = otmp->nobj)
  1500. X           if (otmp->nobj == obj) {
  1501. X          otmp->nobj = obj->nobj;
  1502. X          found = 1;
  1503. X          }
  1504. X        if (!found) panic("error in freeobj");
  1505. X+     remove_object(obj);
  1506. X  #ifdef POLYSELF
  1507. X!     if (!OBJ_AT(u.ux, u.uy) && !levl[u.ux][u.uy].gmask) {
  1508. X          u.uundetected = 0;
  1509. X          if (!Invisible) pru();
  1510. X      }
  1511. X***************
  1512. X*** 244,250 ****
  1513. X      }
  1514. X      free((genericptr_t) gold);
  1515. X  #ifdef POLYSELF
  1516. X!     if (!levl[u.ux][u.uy].omask && !levl[u.ux][u.uy].gmask) {
  1517. X          u.uundetected = 0;
  1518. X          if (!Invisible) pru();
  1519. X      }
  1520. X--- 238,244 ----
  1521. X      }
  1522. X      free((genericptr_t) gold);
  1523. X  #ifdef POLYSELF
  1524. X!     if (!OBJ_AT(u.ux, u.uy) && !levl[u.ux][u.uy].gmask) {
  1525. X          u.uundetected = 0;
  1526. X          if (!Invisible) pru();
  1527. X      }
  1528. X***************
  1529. X*** 294,300 ****
  1530. X  {
  1531. X      register struct obj *otmp;
  1532. X  
  1533. X!     if(levl[x][y].omask)
  1534. X          for(otmp = fobj; otmp; otmp = otmp->nobj)
  1535. X          if(otmp->ox == x && otmp->oy == y && otmp->otyp == n)
  1536. X              return(otmp);
  1537. X--- 288,294 ----
  1538. X  {
  1539. X      register struct obj *otmp;
  1540. X  
  1541. X!     if(OBJ_AT(x, y))
  1542. X          for(otmp = fobj; otmp; otmp = otmp->nobj)
  1543. X          if(otmp->ox == x && otmp->oy == y && otmp->otyp == n)
  1544. X              return(otmp);
  1545. X***************
  1546. X*** 895,901 ****
  1547. X          char stuff[BUFSZ];
  1548. X          register int stct;
  1549. X          register struct obj *otmp;
  1550. X!         boolean billx = inshop() && doinvbill(0);
  1551. X          boolean unpd = FALSE;
  1552. X  
  1553. X      if (!invent && !u.ugold && !billx) {
  1554. X--- 889,895 ----
  1555. X          char stuff[BUFSZ];
  1556. X          register int stct;
  1557. X          register struct obj *otmp;
  1558. X!         boolean billx = in_shop(u.ux, u.uy) && doinvbill(0);
  1559. X          boolean unpd = FALSE;
  1560. X  
  1561. X      if (!invent && !u.ugold && !billx) {
  1562. X***************
  1563. X*** 1139,1145 ****
  1564. X          return( (obj->corpsenm == otmp->corpsenm) &&
  1565. X              (!ONAME(obj) || !strcmp(ONAME(obj), ONAME(otmp))) );
  1566. X  
  1567. X!     else if(obj->known == otmp->known) {
  1568. X          return(objects[obj->otyp].oc_merge);
  1569. X      } else return(FALSE);
  1570. X  }
  1571. X--- 1133,1139 ----
  1572. X          return( (obj->corpsenm == otmp->corpsenm) &&
  1573. X              (!ONAME(obj) || !strcmp(ONAME(obj), ONAME(otmp))) );
  1574. X  
  1575. X!     else if(obj->known == otmp->known || !uses_known(otmp)) {
  1576. X          return(objects[obj->otyp].oc_merge);
  1577. X      } else return(FALSE);
  1578. X  }
  1579. X*** src/Old/ioctl.c    Wed Sep  6 15:47:11 1989
  1580. X--- src/ioctl.c    Fri Aug 25 16:02:36 1989
  1581. X***************
  1582. X*** 16,21 ****
  1583. X--- 16,24 ----
  1584. X  #else
  1585. X  #include    <termio.h>    /* also includes part of <sgtty.h> */
  1586. X  struct termio termio;
  1587. X+ #ifdef AMIX
  1588. X+ #include <sys/ioctl.h>
  1589. X+ #endif /* AMIX */
  1590. X  #endif
  1591. X  
  1592. X  void
  1593. X***************
  1594. X*** 26,32 ****
  1595. X  #else
  1596. X      (void) ioctl(fileno(stdin), (int) TCGETA, &termio);
  1597. X  #endif
  1598. X! #ifdef TIOCGWINSZ
  1599. X      {
  1600. X          /*
  1601. X           * ttysize is found on Suns and BSD
  1602. X--- 29,35 ----
  1603. X  #else
  1604. X      (void) ioctl(fileno(stdin), (int) TCGETA, &termio);
  1605. X  #endif
  1606. X! #if defined(TIOCGWINSZ) && (defined(BSD) || defined(ULTRIX))
  1607. X      {
  1608. X          /*
  1609. X           * ttysize is found on Suns and BSD
  1610. X***************
  1611. X*** 34,48 ****
  1612. X           */
  1613. X          struct winsize ttsz;
  1614. X  
  1615. X!         (void) ioctl(fileno(stdin), (int) TIOCGWINSZ, (char *) &ttsz);
  1616. X!         /*
  1617. X!          * Use the kernel's values for lines and columns if it has
  1618. X!          * any idea.
  1619. X!          */
  1620. X!         if (ttsz.ws_row)
  1621. X!             LI = ttsz.ws_row;
  1622. X!         if (ttsz.ws_col)
  1623. X!             CO = ttsz.ws_col;
  1624. X      }
  1625. X  #endif
  1626. X  }
  1627. X--- 37,53 ----
  1628. X           */
  1629. X          struct winsize ttsz;
  1630. X  
  1631. X!         if (ioctl(fileno(stdin), (int)TIOCGWINSZ, (char *)&ttsz) != -1)
  1632. X!           {
  1633. X!             /*
  1634. X!              * Use the kernel's values for lines and columns if it has
  1635. X!              * any idea.
  1636. X!              */
  1637. X!             if (ttsz.ws_row)
  1638. X!               LI = ttsz.ws_row;
  1639. X!             if (ttsz.ws_col)
  1640. X!               CO = ttsz.ws_col;
  1641. X!           }
  1642. X      }
  1643. X  #endif
  1644. X  }
  1645. X*** src/Old/lev_comp.l    Wed Sep  6 15:48:33 1989
  1646. X--- src/lev_comp.l    Mon Sep  4 23:41:56 1989
  1647. X***************
  1648. X*** 3,12 ****
  1649. X--- 3,18 ----
  1650. X  /*    Copyright (c) 1989 by Jean-Christophe Collet */
  1651. X  /* NetHack may be freely redistributed.  See license for details. */
  1652. X  
  1653. X+ #define LEV_LEX_C
  1654. X+ 
  1655. X  #include "hack.h"
  1656. X  #include "lev_comp.h"
  1657. X  #include "sp_lev.h"
  1658. X  
  1659. X+ #ifdef MSDOS
  1660. X+ #undef exit
  1661. X+ #endif
  1662. X+ 
  1663. X  int line_number = 1;
  1664. X  
  1665. X  /* This is *** UGLY *** but I can't think a better way to do it
  1666. X***************
  1667. X*** 23,31 ****
  1668. X  MAZE        return MAZE_ID;
  1669. X  LEVEL        return LEVEL_ID;
  1670. X  GEOMETRY    return GEOMETRY_ID;
  1671. X! ^MAP$        { BEGIN MAPC; }
  1672. X  <MAPC>[-|}{+SK\\#. ]*\n    { line_number++; yymore(); }    
  1673. X! <MAPC>ENDMAP$    { BEGIN 0;
  1674. X            yytext[yyleng-7] = 0; /* Discard \nENDMAP */
  1675. X            yylval.map = (char *) alloc(strlen(yytext)+1);
  1676. X            strcpy(yylval.map, yytext+1);
  1677. X--- 29,37 ----
  1678. X  MAZE        return MAZE_ID;
  1679. X  LEVEL        return LEVEL_ID;
  1680. X  GEOMETRY    return GEOMETRY_ID;
  1681. X! ^MAP\n        { BEGIN MAPC; }
  1682. X  <MAPC>[-|}{+SK\\#. ]*\n    { line_number++; yymore(); }    
  1683. X! <MAPC>ENDMAP\n    { BEGIN 0;
  1684. X            yytext[yyleng-7] = 0; /* Discard \nENDMAP */
  1685. X            yylval.map = (char *) alloc(strlen(yytext)+1);
  1686. X            strcpy(yylval.map, yytext+1);
  1687. X*** src/Old/lev_comp.y    Wed Sep  6 15:48:48 1989
  1688. X--- src/lev_comp.y    Sat Sep  2 15:05:38 1989
  1689. X***************
  1690. X*** 53,59 ****
  1691. X      "trapdoor",    TRAPDOOR,
  1692. X      "teleport",    TELEP_TRAP,
  1693. X      "pit",        PIT,
  1694. X!     "sleeping gas",    SLP_GAS_TRAP,
  1695. X      "magic",    MGTRP,
  1696. X      "board",    SQBRD,
  1697. X      "web",        WEB,
  1698. X--- 53,59 ----
  1699. X      "trapdoor",    TRAPDOOR,
  1700. X      "teleport",    TELEP_TRAP,
  1701. X      "pit",        PIT,
  1702. X!     "sleep gas",    SLP_GAS_TRAP,
  1703. X      "magic",    MGTRP,
  1704. X      "board",    SQBRD,
  1705. X      "web",        WEB,
  1706. X*** src/Old/lock.c    Wed Sep  6 15:50:04 1989
  1707. X--- src/lock.c    Tue Aug 29 18:11:47 1989
  1708. X***************
  1709. X*** 130,138 ****
  1710. X              otmp->nobj = xlock.box->nobj;
  1711. X              xlock.box->nobj = otmp;
  1712. X              otmp->cobj = (struct obj *)0;
  1713. X!             otmp->ox = u.ux;
  1714. X!             otmp->oy = u.uy;
  1715. X!             levl[u.ux][u.uy].omask = 1;
  1716. X              stackobj(otmp);
  1717. X              }
  1718. X          } else probj = otmp;
  1719. X--- 130,136 ----
  1720. X              otmp->nobj = xlock.box->nobj;
  1721. X              xlock.box->nobj = otmp;
  1722. X              otmp->cobj = (struct obj *)0;
  1723. X!             place_object(otmp, u.ux, u.uy);
  1724. X              stackobj(otmp);
  1725. X              }
  1726. X          } else probj = otmp;
  1727. X***************
  1728. X*** 184,190 ****
  1729. X      y = u.uy + u.dy;
  1730. X      if((x == u.ux) && (y == u.uy)) { /* pick the lock on a container */
  1731. X          c = 'n';            /* in case there are no boxes here */
  1732. X!         if(levl[x][y].omask)
  1733. X          for(otmp = fobj; otmp; otmp = otmp->nobj)
  1734. X          if((otmp->ox == x) && (otmp->oy == y))
  1735. X              if(Is_box(otmp) &&
  1736. X--- 182,188 ----
  1737. X      y = u.uy + u.dy;
  1738. X      if((x == u.ux) && (y == u.uy)) { /* pick the lock on a container */
  1739. X          c = 'n';            /* in case there are no boxes here */
  1740. X!         if(OBJ_AT(x, y))
  1741. X          for(otmp = fobj; otmp; otmp = otmp->nobj)
  1742. X          if((otmp->ox == x) && (otmp->oy == y))
  1743. X              if(Is_box(otmp) &&
  1744. X***************
  1745. X*** 331,337 ****
  1746. X  
  1747. X      /* A lock is made only for the honest man, the thief will break it. */
  1748. X      xlock.box = (struct obj *)0;
  1749. X!     if(levl[u.ux][u.uy].omask)
  1750. X      for(otmp = fobj; otmp; otmp = otmp->nobj)
  1751. X          if((otmp->ox == u.ux) && (otmp->oy == u.uy))
  1752. X          if(Is_box(otmp)) {
  1753. X--- 329,335 ----
  1754. X  
  1755. X      /* A lock is made only for the honest man, the thief will break it. */
  1756. X      xlock.box = (struct obj *)0;
  1757. X!     if(OBJ_AT(u.ux, u.uy))
  1758. X      for(otmp = fobj; otmp; otmp = otmp->nobj)
  1759. X          if((otmp->ox == u.ux) && (otmp->oy == u.uy))
  1760. X          if(Is_box(otmp)) {
  1761. X***************
  1762. X*** 438,444 ****
  1763. X              "Some creature" : Monnam(m_at(x,y)));
  1764. X          return(TRUE);
  1765. X      }
  1766. X!     if (levl[x][y].omask || levl[x][y].gmask) {
  1767. X  obj:
  1768. X          pline("Something's in the way.");
  1769. X          return(TRUE);
  1770. X--- 436,442 ----
  1771. X              "Some creature" : Monnam(m_at(x,y)));
  1772. X          return(TRUE);
  1773. X      }
  1774. X!     if (OBJ_AT(x, y) || levl[x][y].gmask) {
  1775. X  obj:
  1776. X          pline("Something's in the way.");
  1777. X          return(TRUE);
  1778. X***************
  1779. X*** 555,563 ****
  1780. X      register struct rm *door = &levl[x][y];
  1781. X      boolean res = 1;
  1782. X  
  1783. X-     if(obstructed(x,y))
  1784. X-         return 0;
  1785. X- 
  1786. X      if(door->typ == SDOOR) {
  1787. X          if(otmp->otyp == WAN_OPENING
  1788. X  #ifdef SPELLS
  1789. X--- 553,558 ----
  1790. X***************
  1791. X*** 595,600 ****
  1792. X--- 590,596 ----
  1793. X  #ifdef SPELLS
  1794. X          case SPE_WIZARD_LOCK:
  1795. X  #endif
  1796. X+         if(obstructed(x,y)) return 0;
  1797. X          if (cansee(x,y))
  1798. X          switch (door->doormask & ~D_TRAPPED) {
  1799. X              case D_CLOSED:
  1800. X*** src/Old/mail.c    Wed Sep  6 16:29:55 1989
  1801. X--- src/mail.c    Tue Sep  5 21:34:20 1989
  1802. X***************
  1803. X*** 53,59 ****
  1804. X  
  1805. X  # ifdef UNIX
  1806. X  static struct stat omstat,nmstat;
  1807. X! static char *mailbox;
  1808. X  static long laststattime;
  1809. X  
  1810. X  #  ifdef BSD
  1811. X--- 53,59 ----
  1812. X  
  1813. X  # ifdef UNIX
  1814. X  static struct stat omstat,nmstat;
  1815. X! static char *mailbox = NULL;
  1816. X  static long laststattime;
  1817. X  
  1818. X  #  ifdef BSD
  1819. X***************
  1820. X*** 65,71 ****
  1821. X  
  1822. X  void
  1823. X  getmailstatus() {
  1824. X!     if(!(mailbox = getenv("MAIL"))) {
  1825. X  #  ifdef MAILPATH
  1826. X          mailbox = (char *) alloc(sizeof(MAILPATH)+8);
  1827. X          Strcpy(mailbox, MAILPATH);
  1828. X--- 65,71 ----
  1829. X  
  1830. X  void
  1831. X  getmailstatus() {
  1832. X!     if(!mailbox && !(mailbox = getenv("MAIL"))) {
  1833. X  #  ifdef MAILPATH
  1834. X          mailbox = (char *) alloc(sizeof(MAILPATH)+8);
  1835. X          Strcpy(mailbox, MAILPATH);
  1836. X***************
  1837. X*** 180,186 ****
  1838. X          makeknown(SCR_MAIL);
  1839. X          stackobj(fobj);        
  1840. X          verbalize("Oops!");
  1841. X-         more();
  1842. X      } else {
  1843. X          /* set known and do prinv() */
  1844. X          (void) identify(addinv(mksobj(SCR_MAIL,FALSE)));
  1845. X--- 180,185 ----
  1846. X*** src/Old/makedefs.c    Wed Sep  6 16:30:13 1989
  1847. X--- src/makedefs.c    Fri Sep  1 14:25:57 1989
  1848. X***************
  1849. X*** 63,69 ****
  1850. X  char    in_line[256];
  1851. X  extern char *gets P((char *));
  1852. X  void do_objs(), do_traps(), do_data(), do_date(), do_permonst(), do_rumors();
  1853. X! char *limit P((char *,boolean));
  1854. X  FILE *_freopen();
  1855. X  
  1856. X  int
  1857. X--- 63,69 ----
  1858. X  char    in_line[256];
  1859. X  extern char *gets P((char *));
  1860. X  void do_objs(), do_traps(), do_data(), do_date(), do_permonst(), do_rumors();
  1861. X! char *limit P((char *,BOOLEAN_P));
  1862. X  FILE *_freopen();
  1863. X  
  1864. X  int
  1865. X*** src/Old/makemon.c    Wed Sep  6 16:30:35 1989
  1866. X--- src/makemon.c    Thu Aug 31 19:09:29 1989
  1867. X***************
  1868. X*** 542,548 ****
  1869. X              (ptr == &mons[PM_GIANT_EEL])) && rn2(5))
  1870. X              mtmp->msleep = 1;
  1871. X      } else {
  1872. X!         if(x == u.ux && y == u.uy && ptr->mlet != S_GHOST) {
  1873. X              mnexto(mtmp);
  1874. X              if (ptr->mlet == S_MIMIC) {
  1875. X                  set_mimic_sym(mtmp);
  1876. X--- 542,548 ----
  1877. X              (ptr == &mons[PM_GIANT_EEL])) && rn2(5))
  1878. X              mtmp->msleep = 1;
  1879. X      } else {
  1880. X!         if(x == u.ux && y == u.uy) {
  1881. X              mnexto(mtmp);
  1882. X              if (ptr->mlet == S_MIMIC) {
  1883. X                  set_mimic_sym(mtmp);
  1884. X***************
  1885. X*** 1079,1085 ****
  1886. X      roomno = inroom(mtmp->mx, mtmp->my);
  1887. X      if (levl[mtmp->mx][mtmp->my].gmask)
  1888. X          sym = GOLD_SYM;
  1889. X!     else if (levl[mtmp->mx][mtmp->my].omask)
  1890. X          sym = o_at(mtmp->mx,mtmp->my)->olet;
  1891. X      else if (IS_DOOR(levl[mtmp->mx][mtmp->my].typ) ||
  1892. X           IS_WALL(levl[mtmp->mx][mtmp->my].typ))
  1893. X--- 1079,1085 ----
  1894. X      roomno = inroom(mtmp->mx, mtmp->my);
  1895. X      if (levl[mtmp->mx][mtmp->my].gmask)
  1896. X          sym = GOLD_SYM;
  1897. X!     else if (OBJ_AT(mtmp->mx, mtmp->my))
  1898. X          sym = o_at(mtmp->mx,mtmp->my)->olet;
  1899. X      else if (IS_DOOR(levl[mtmp->mx][mtmp->my].typ) ||
  1900. X           IS_WALL(levl[mtmp->mx][mtmp->my].typ))
  1901. X*** src/Old/mcastu.c    Wed Sep  6 16:31:19 1989
  1902. X--- src/mcastu.c    Thu Aug 17 23:20:50 1989
  1903. X***************
  1904. X*** 166,172 ****
  1905. X              case 5:        /* make invisible if not */
  1906. X              case 4:
  1907. X              if(!mtmp->minvis) {
  1908. X!                 if(canseemon(mtmp) && !See_invisible && !Telepat)
  1909. X                  pline("%s suddenly disappears!",
  1910. X                        Monnam(mtmp));
  1911. X                  mtmp->minvis = 1;
  1912. X--- 166,172 ----
  1913. X              case 5:        /* make invisible if not */
  1914. X              case 4:
  1915. X              if(!mtmp->minvis) {
  1916. X!                 if(canseemon(mtmp) && !See_invisible)
  1917. X                  pline("%s suddenly disappears!",
  1918. X                        Monnam(mtmp));
  1919. X                  mtmp->minvis = 1;
  1920. X*** src/Old/mhitm.c    Wed Sep  6 16:31:36 1989
  1921. X--- src/mhitm.c    Thu Aug 31 15:17:32 1989
  1922. X***************
  1923. X*** 15,21 ****
  1924. X  static int hitmm P((struct monst *,struct monst *,struct attack *));
  1925. X  static int gazemm P((struct monst *,struct monst *,struct attack *));
  1926. X  static int gulpmm P((struct monst *,struct monst *,struct attack *));
  1927. X! static int explmm P((struct monst *,struct attack *));
  1928. X  static int mdamagem P((struct monst *,struct monst *,struct attack *));
  1929. X  static void mswingsm P((struct monst *, struct monst *, struct obj *));
  1930. X  
  1931. X--- 15,21 ----
  1932. X  static int hitmm P((struct monst *,struct monst *,struct attack *));
  1933. X  static int gazemm P((struct monst *,struct monst *,struct attack *));
  1934. X  static int gulpmm P((struct monst *,struct monst *,struct attack *));
  1935. X! static int explmm P((struct monst *,struct monst *,struct attack *));
  1936. X  static int mdamagem P((struct monst *,struct monst *,struct attack *));
  1937. X  static void mswingsm P((struct monst *, struct monst *, struct obj *));
  1938. X  
  1939. X***************
  1940. X*** 153,159 ****
  1941. X  
  1942. X          case AT_EXPL:    /* automatic hit if next to */
  1943. X              strike = -1;
  1944. X!             sum[i] = explmm(magr, mattk);
  1945. X              break;
  1946. X  
  1947. X          case AT_ENGL:
  1948. X--- 153,159 ----
  1949. X  
  1950. X          case AT_EXPL:    /* automatic hit if next to */
  1951. X              strike = -1;
  1952. X!             sum[i] = explmm(magr, mdef, mattk);
  1953. X              break;
  1954. X  
  1955. X          case AT_ENGL:
  1956. X***************
  1957. X*** 284,308 ****
  1958. X  }
  1959. X  
  1960. X  static int
  1961. X! explmm(magr, mattk)
  1962. X!     register struct monst *magr;
  1963. X      register struct    attack *mattk;
  1964. X  {
  1965. X-     register struct monst *mon;
  1966. X  
  1967. X      if(cansee(magr->mx, magr->my))
  1968. X          pline("%s explodes!", Monnam(magr));
  1969. X      else    noises(magr, mattk);
  1970. X  
  1971. X!     for(mon = fmon; mon; mon = mon->nmon)
  1972. X!         if(mon != magr) {
  1973. X!         if(dist2(mon->mx, mon->my, magr->mx, magr->my) < 3)
  1974. X!             (void) mdamagem(magr, mon, mattk);
  1975. X!         }
  1976. X! 
  1977. X!     if(dist2(magr->mx, magr->my, u.ux, u.uy) < 3)
  1978. X!         (void) mdamageu(magr, d((int)mattk->damn, (int)mattk->damd));
  1979. X  
  1980. X      mondead(magr);
  1981. X      return(2);
  1982. X  }
  1983. X--- 284,302 ----
  1984. X  }
  1985. X  
  1986. X  static int
  1987. X! explmm(magr, mdef, mattk)
  1988. X!     register struct monst *magr, *mdef;
  1989. X      register struct    attack *mattk;
  1990. X  {
  1991. X  
  1992. X      if(cansee(magr->mx, magr->my))
  1993. X          pline("%s explodes!", Monnam(magr));
  1994. X      else    noises(magr, mattk);
  1995. X  
  1996. X!     (void) mdamagem(magr, mdef, mattk);
  1997. X  
  1998. X+     if(magr->mtame)
  1999. X+         You("have a sad feeling for a moment, then it passes.");
  2000. X      mondead(magr);
  2001. X      return(2);
  2002. X  }
  2003. X***************
  2004. X*** 325,330 ****
  2005. X--- 319,328 ----
  2006. X          if (magr->mcan) break;
  2007. X          if(vis) pline("%s staggers for a moment.", Monnam(mdef));
  2008. X          mdef->mstun = 1;
  2009. X+         /* fall through */
  2010. X+         case AD_WERE:
  2011. X+         case AD_HEAL:
  2012. X+         case AD_LEGS:
  2013. X          case AD_PHYS:
  2014. X          if (mattk->aatyp == AT_KICK && thick_skinned(mdef->data))
  2015. X              tmp = 0;
  2016. X***************
  2017. X*** 657,665 ****
  2018. X      Strcpy(buf, mon_nam(mdef));
  2019. X      if (!flags.verbose || Blind || otemp->olet != WEAPON_SYM) return;
  2020. X      pline("%s %s %s %s at %s.", Monnam(magr),
  2021. X!           (otemp->otyp == SPEAR ||
  2022. X!            otemp->otyp == LANCE ||
  2023. X!            otemp->otyp == GLAIVE ||
  2024. X             otemp->otyp == TRIDENT) ? "thrusts" : "swings",
  2025. X            is_female(magr) ? "her" :
  2026. X            is_human(magr->data) ? "his" : "its",
  2027. X--- 655,664 ----
  2028. X      Strcpy(buf, mon_nam(mdef));
  2029. X      if (!flags.verbose || Blind || otemp->olet != WEAPON_SYM) return;
  2030. X      pline("%s %s %s %s at %s.", Monnam(magr),
  2031. X!           ((otemp->otyp >= SPEAR &&
  2032. X!             otemp->otyp <= LANCE) ||
  2033. X!            (otemp->otyp >= PARTISAN &&
  2034. X!             otemp->otyp <= SPETUM) ||
  2035. X             otemp->otyp == TRIDENT) ? "thrusts" : "swings",
  2036. X            is_female(magr) ? "her" :
  2037. X            is_human(magr->data) ? "his" : "its",
  2038. X*** src/Old/mhitu.c    Wed Sep  6 16:32:08 1989
  2039. X--- src/mhitu.c    Sat Sep  2 15:05:22 1989
  2040. X***************
  2041. X*** 84,92 ****
  2042. X  {
  2043. X      if (!flags.verbose || Blind || otemp->olet != WEAPON_SYM) return;
  2044. X      pline("%s %s %s %s.", Monnam(mtmp),
  2045. X!           (otemp->otyp == SPEAR ||
  2046. X!            otemp->otyp == LANCE ||
  2047. X!            otemp->otyp == GLAIVE ||
  2048. X             otemp->otyp == TRIDENT) ? "thrusts" : "swings",
  2049. X            is_female(mtmp) ? "her" :
  2050. X            is_human(mtmp->data) ? "his" : "its",
  2051. X--- 84,93 ----
  2052. X  {
  2053. X      if (!flags.verbose || Blind || otemp->olet != WEAPON_SYM) return;
  2054. X      pline("%s %s %s %s.", Monnam(mtmp),
  2055. X!           ((otemp->otyp >= SPEAR &&
  2056. X!             otemp->otyp <= LANCE) ||
  2057. X!            (otemp->otyp >= PARTISAN &&
  2058. X!             otemp->otyp <= SPETUM) ||
  2059. X             otemp->otyp == TRIDENT) ? "thrusts" : "swings",
  2060. X            is_female(mtmp) ? "her" :
  2061. X            is_human(mtmp->data) ? "his" : "its",
  2062. X***************
  2063. X*** 145,161 ****
  2064. X          Monnam(mtmp));
  2065. X  }
  2066. X  
  2067. X! static void
  2068. X  regurgitates(mtmp)
  2069. X  register struct monst *mtmp;
  2070. X  {
  2071. X!     u.ux = mtmp->mx;
  2072. X!     u.uy = mtmp->my;
  2073. X!     u.uswallow = 0;
  2074. X!     u.ustuck = 0;
  2075. X      mnexto(mtmp);
  2076. X!     setsee();
  2077. X!     docrt();
  2078. X      spoteffects();
  2079. X      /* to cover for a case where mtmp is not in a next square */
  2080. X      if(um_dist(mtmp->mx,mtmp->my,1))
  2081. X--- 146,158 ----
  2082. X          Monnam(mtmp));
  2083. X  }
  2084. X  
  2085. X! void
  2086. X  regurgitates(mtmp)
  2087. X  register struct monst *mtmp;
  2088. X  {
  2089. X!     unstuck(mtmp);
  2090. X      mnexto(mtmp);
  2091. X!     pru();
  2092. X      spoteffects();
  2093. X      /* to cover for a case where mtmp is not in a next square */
  2094. X      if(um_dist(mtmp->mx,mtmp->my,1))
  2095. X***************
  2096. X*** 246,252 ****
  2097. X               pline("Wait, %s!  There's a %s named %s hiding under %s!",
  2098. X              mtmp->mnamelth ? NAME(mtmp) : mtmp->data->mname,
  2099. X              uasmon->mname, plname,
  2100. X!             levl[u.ux][u.uy].omask ? doname(o_at(u.ux,u.uy)) :
  2101. X              "some gold");
  2102. X              prme();
  2103. X          }
  2104. X--- 243,249 ----
  2105. X               pline("Wait, %s!  There's a %s named %s hiding under %s!",
  2106. X              mtmp->mnamelth ? NAME(mtmp) : mtmp->data->mname,
  2107. X              uasmon->mname, plname,
  2108. X!             OBJ_AT(u.ux, u.uy) ? doname(o_at(u.ux,u.uy)) :
  2109. X              "some gold");
  2110. X              prme();
  2111. X          }
  2112. X***************
  2113. X*** 467,473 ****
  2114. X          if(!(Blind ? Telepat : (HTelepat & WORN_HELMET))) {
  2115. X          register struct obj *obj;
  2116. X  
  2117. X!         if(levl[mtmp->mx][mtmp->my].omask == 1) {
  2118. X              if(obj = o_at(mtmp->mx,mtmp->my))
  2119. X              pline("%s was hidden under %s!",
  2120. X                    Xmonnam(mtmp), doname(obj));
  2121. X--- 464,470 ----
  2122. X          if(!(Blind ? Telepat : (HTelepat & WORN_HELMET))) {
  2123. X          register struct obj *obj;
  2124. X  
  2125. X!         if(OBJ_AT(mtmp->mx, mtmp->my)) {
  2126. X              if(obj = o_at(mtmp->mx,mtmp->my))
  2127. X              pline("%s was hidden under %s!",
  2128. X                    Xmonnam(mtmp), doname(obj));
  2129. X***************
  2130. X*** 816,822 ****
  2131. X           * is, no matter what covers it.
  2132. X           */
  2133. X          getbronze = (mdat == &mons[PM_BLACK_PUDDING] &&
  2134. X!                  uarm && uarm->otyp == BRONZE_PLATE_MAIL);
  2135. X          while (1) {
  2136. X              switch(rn2(5)) {
  2137. X              case 0:
  2138. X--- 813,819 ----
  2139. X           * is, no matter what covers it.
  2140. X           */
  2141. X          getbronze = (mdat == &mons[PM_BLACK_PUDDING] &&
  2142. X!                  uarm && is_corrodeable(uarm));
  2143. X          while (1) {
  2144. X              switch(rn2(5)) {
  2145. X              case 0:
  2146. X***************
  2147. X*** 1520,1526 ****
  2148. X  #endif
  2149. X                  break;
  2150. X              case 4: You("feel exhausted.");
  2151. X!                 losehp(5+rnd(10), "bout of exhaustion");
  2152. X                  break;
  2153. X          }
  2154. X      } else {
  2155. X--- 1517,1523 ----
  2156. X  #endif
  2157. X                  break;
  2158. X              case 4: You("feel exhausted.");
  2159. X!                 losehp(5+rnd(10), "exhaustion");
  2160. X                  break;
  2161. X          }
  2162. X      } else {
  2163. X
  2164. END_OF_FILE
  2165. if test 56862 -ne `wc -c <'patch03c'`; then
  2166.     echo shar: \"'patch03c'\" unpacked with wrong size!
  2167. fi
  2168. # end of 'patch03c'
  2169. fi
  2170. echo shar: End of archive 3 \(of 6\).
  2171. cp /dev/null ark3isdone
  2172. MISSING=""
  2173. for I in 1 2 3 4 5 6 ; do
  2174.     if test ! -f ark${I}isdone ; then
  2175.     MISSING="${MISSING} ${I}"
  2176.     fi
  2177. done
  2178. if test "${MISSING}" = "" ; then
  2179.     echo You have unpacked all 6 archives.
  2180.     rm -f ark[1-9]isdone
  2181. else
  2182.     echo You still need to unpack the following archives:
  2183.     echo "        " ${MISSING}
  2184. fi
  2185. ##  End of shell archive.
  2186. exit 0
  2187.